package com.ruoyi.system.service;

import com.ruoyi.system.domain.BsOrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.system.domain.dto.BsOrderListDto;
import com.ruoyi.system.domain.ro.OrderCount;
import com.ruoyi.system.domain.vo.*;

import java.math.BigDecimal;
import java.util.List;

/**
 *
 */
public interface BsOrderInfoService extends IService<BsOrderInfo> {

    List<OrderMenpiaoVo> getDayMenpiaoNum(String date, Long jingquId);

    /**
     * 查询景区订单通过订单ID
     * @param orderId
     * @return
     */
    BsOrderInfo getOrderInfoWithDetailsByOrderId(Long orderId);

    /**
     * 查询景区指定日期下的所有订单
     * @param jingquId
     * @param date
     * @return
     */
    List<BsOrderInfo> getOrderInfoWithDetailsByJingquIdAndDate(Long jingquId, String date);

    /**
     * 查询景区的所有订单
     * @param jingquId
     * @return
     */
    List<Future7DaysMenpiaoInfoVo> getFutureMenpiaoNum(Long jingquId);

    /**
     * 查询景区的所有订单，不包含已经取消的订单
     * @param jingquId 景区ID
     * @param date 日期
     * @return
     */
    public List<BsOrderInfo> getOrderInfoWithDetailsByJingquIdAndDateWithOutCancle(Long jingquId, String date);

    /**
     * 生成订单,返回订单ID
     * @param orderGenVo
     */
    Long genOrder(OrderGenVo orderGenVo);

    List<OrderDetailsVo> getOrderDetailsByOrderId(Long orderId);

    MyOrderDetailsVo getOrderAllDetailsByOrderId(Long orderId);

    List<BsOrderListDto> getOrderDetailsList(List<BsOrderInfo> list);

    List<BsOrderInfo> selectOver30NoPayOrder();

    List<BsOrderInfo> selectOverTimeOrder();

    int getPeopleCountByDate(int status, String date, Long jingquId);

    int getPeopleCountByMonth(int status, String month, Long jingquId);

    int getPeopleCountByYear(int status, String year, Long jingquId);

    int getPeopleCountBySeason(int status,String year,  int season, Long jingquId);

    BigDecimal getCostByMonth(int status, String month, Long jingquId);

    BigDecimal getCostByYear(int status, String year, Long jingquId);

    BigDecimal getCostBySeason(int status,String year, int season, Long jingquId);

    boolean checkEnoughMenpiaoNum(OrderGenVo orderGenVo);

    boolean checkAlreadyOrder(OrderGenVo orderGenVo);

    OrderCount orderCount(Long userId);

}
